﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace MigrationTool
{
    /// <summary>
    /// オプション画面フォームクラス
    /// </summary>
    public partial class OptionForm : Form
    {
        #region コンストラクタ
        /// <summary>
        /// コンストラクタ
        /// </summary>
        public OptionForm()
        {
            InitializeComponent();
        }
        #endregion

        #region イベント
        /// <summary>
        /// ロード
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void OptionForm_Load(object sender, EventArgs e)
        {
            //設定ファイルから値を取得
            txtDownloadTime.Text = Properties.Settings.Default.Option_DownloadTimer;
            txtExportTime.Text = Properties.Settings.Default.Option_ExportTimer;
            txtAccount.Text = Properties.Settings.Default.Option_Account;
            txtOutlookTime.Text = Properties.Settings.Default.Option_OutLookTimer;
        }

        /// <summary>
        /// キープレスイベント
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void txt_KeyPress(object sender, KeyPressEventArgs e)
        {
            //数値とバックスペース以外は処理を受け付けない
            if ((e.KeyChar < '0' || e.KeyChar > '9') && e.KeyChar != '\b')
            {
                e.Handled = true;
            }
        }

        /// <summary>
        /// OKボタンクリックイベント
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnOK_Click(object sender, EventArgs e)
        {
            //入力チェック
            if (!CheckInputValue())
            {
                return;
            }
            //設定ファイルに画面の設定値を保存する
            Properties.Settings.Default.Option_DownloadTimer = txtDownloadTime.Text.Trim();
            Properties.Settings.Default.Option_ExportTimer = txtExportTime.Text.Trim();
            Properties.Settings.Default.Option_Account = txtAccount.Text.Trim();
            Properties.Settings.Default.Option_OutLookTimer = txtOutlookTime.Text.Trim();
            Properties.Settings.Default.Save();
            //終了
            this.Close();
        }

        /// <summary>
        /// キャンセルボタンクリックイベント
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnCancel_Click(object sender, EventArgs e)
        {
            //終了
            this.Close();
        }
        #endregion

        #region メソッド
        /// <summary>
        /// 入力チェック
        /// </summary>
        /// <returns>可否(可:True/否：False)</returns>
        private bool CheckInputValue()
        {
            if (string.IsNullOrEmpty(txtOutlookTime.Text))
            {
                MessageBox.Show(string.Format(MessageConst.MSG_INPUT_TEXT, "OutLookのIMAPメールダウンロード時間"), string.Empty, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtOutlookTime.Focus();
                return false;
            }
            if (!IsNumeric(txtOutlookTime.Text))
            {
                MessageBox.Show(string.Format(MessageConst.MSG_INPUT_TEXT, "数値"), string.Empty, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtOutlookTime.Focus();
                return false;
            }
            if (txtOutlookTime.Text == "0")
            {
                MessageBox.Show(MessageConst.MSG_LIMIT_TEXT, string.Empty, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtOutlookTime.Focus();
                return false;
            }
            if (string.IsNullOrEmpty(txtDownloadTime.Text))
            {
                MessageBox.Show(string.Format(MessageConst.MSG_INPUT_TEXT, "IMAPメールのダウンロード待機時間"), string.Empty, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtDownloadTime.Focus();
                return false;
            }
            if (!IsNumeric(txtDownloadTime.Text))
            {
                MessageBox.Show(string.Format(MessageConst.MSG_INPUT_TEXT, "数値"), string.Empty, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtDownloadTime.Focus();
                return false;
            }
            if (txtDownloadTime.Text == "0")
            {
                MessageBox.Show(MessageConst.MSG_LIMIT_TEXT, string.Empty, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtDownloadTime.Focus();
                return false;
            }
            if (string.IsNullOrEmpty(txtExportTime.Text))
            {
                MessageBox.Show(string.Format(MessageConst.MSG_INPUT_TEXT, "IMAPメールの100MBあたりのエクスポート時間"), string.Empty, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtExportTime.Focus();
                return false;
            }
            if (!IsNumeric(txtExportTime.Text))
            {
                MessageBox.Show(string.Format(MessageConst.MSG_INPUT_TEXT, "数値"), string.Empty, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtExportTime.Focus();
                return false;
            }
            if (txtExportTime.Text == "0")
            {
                MessageBox.Show(MessageConst.MSG_LIMIT_TEXT, string.Empty, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtExportTime.Focus();
                return false;
            }
            if (string.IsNullOrEmpty(txtAccount.Text))
            {
                MessageBox.Show(string.Format(MessageConst.MSG_INPUT_TEXT, "1プロファイルに含むユーザー数"), string.Empty, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtAccount.Focus();
                return false;
            }
            if (txtAccount.Text == "0")
            {
                MessageBox.Show(MessageConst.MSG_PROFILE_TEXT, string.Empty, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtAccount.Focus();
                return false;
            }
            if (!IsNumeric(txtAccount.Text))
            {
                MessageBox.Show(string.Format(MessageConst.MSG_INPUT_TEXT, "数値"), string.Empty, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtAccount.Focus();
                return false;
            }
            if (int.Parse(txtAccount.Text) > 5)
            {
                MessageBox.Show(string.Format(MessageConst.MSG_INPUT_TEXT, "5以下"), string.Empty, MessageBoxButtons.OK, MessageBoxIcon.Warning);
                txtAccount.Focus();
                return false;
            }


            return true;
        }

        /// <summary>
        /// 数値判定
        /// </summary>
        /// <param name="strTarget">判定対象文字列</param>
        /// <returns>可否(可:True/否：False)</returns>
        public bool IsNumeric(string strTarget)
        {
            double dNullable;
            return double.TryParse(strTarget,System.Globalization.NumberStyles.Any,null,out dNullable);
        }
        #endregion
    }
}
